package logicaDeNegocios;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.util.Vector;

import accesoADatos.SqlQuery;

public class Cliente {
	private String id;
	private String nombre;
	private String direccion;
	private String email;
	private String cedula;
	private String pasaporte;
	private String fecha;
	private Vector <Telefono> telefonos;
	
	//constructor
	public Cliente(String id, String nombre, String direccion, String email,
			String cedula, String pasaporte, String fecha, Vector<Telefono> telefonos) {
		super();
		this.id = id;
		this.nombre = nombre;
		this.direccion = direccion;
		this.email = email;
		this.cedula = cedula;
		this.pasaporte = pasaporte;
		this.fecha = fecha;
		this.telefonos = telefonos;
	}

	public String obtenerId() 
	{
		return id;
	}

	public void establecerId(String id) 
	{
		this.id = id;
	}

	public String obtenerNombre()
	{
		return nombre;
	}

	public void establecerNombre(String nombre) 
	{
		this.nombre = nombre;
	}

	public String obtenerDireccion()
	{
		return direccion;
	}

	public void establecerDireccion(String direccion) 
	{
		this.direccion = direccion;
	}

	public String obtenerEmail() 
	{
		return email;
	}

	public void establecerEmail(String email)
	{
		this.email = email;
	}

	public String obtenerCedula() {
		return cedula;
	}

	public void establecerCedula(String cedula) 
	{
		this.cedula = cedula;
	}

	public String obtenerPasaporte() 
	{
		return pasaporte;
	}

	public void establecerPasaporte(String pasaporte) 
	{
		this.pasaporte = pasaporte;
	}

	public String obtenerFecha() 
	{
		return fecha;
	}

	public void establecerFecha(String fecha) 
	{
		this.fecha = fecha;
	}

	public Vector<Telefono> obtenerTelefonos() 
	{
		return telefonos;
	}

	public void establecerTelefonos(Vector<Telefono> telefonos) 
	{
		this.telefonos = telefonos;
	}

	public void leer() {
		// TODO Auto-generated method stub

	}
	
	public int guardar() throws ClassNotFoundException, SQLException 
	{		
		String sql = "INSERT INTO clientes (id_cliente,nombre,direccion,email,cedula,pasaporte,fecha) VALUES(?,?,?,?,?,?,?)";
		return actualizarConsulta(sql);
	}
	
	public int actualizar() throws ClassNotFoundException, SQLException {
		String sql = "UPDATE  clientes SET id_cliente =? ,nombre =? ,direccion =? ,email =? ,cedula =?, "
											+ "pasaporte=?, fecha =? WHERE id_cliente ='" + this.obtenerId() + "'";
		return actualizarConsulta(sql);
	}
	
	private int actualizarConsulta(String insercionOActualizacion) throws ClassNotFoundException, SQLException
	{
		SqlQuery objetoSql = new SqlQuery();
		objetoSql.conectar("localhost", "pos", "root", "");
		
		PreparedStatement psdCliente = objetoSql.conexion.prepareStatement(insercionOActualizacion,PreparedStatement.RETURN_GENERATED_KEYS);
		psdCliente.setString(1, id);
		psdCliente.setString(2, nombre);
		psdCliente.setString(3, direccion);
		psdCliente.setString(4, email);
		psdCliente.setString(5, cedula);
		psdCliente.setString(6, pasaporte);
		psdCliente.setString(7, fecha );
		psdCliente.executeUpdate();
		ResultSet conjuntoResultados = psdCliente.getGeneratedKeys();
		int idInsertado = -1;
		while ( conjuntoResultados.next() )
		{
			 idInsertado = conjuntoResultados.getInt(1);	
		}
		
		if (idInsertado > -1 || id != null)
		{
			if (id != null)
			{
				PreparedStatement psdBorrarTelefonos = objetoSql.conexion.prepareStatement("DELETE FROM TELEFONOS "
																							+ "WHERE id_cliente =" + id);
				psdBorrarTelefonos.executeUpdate();
				idInsertado = Integer.parseInt(id);
			}
			
			for (int i = 0; i < telefonos.size(); i++) 
			{
				Telefono telefonoActual = telefonos.get(i);
				String cadena = "INSERT INTO TELEFONOS (id_cliente, numero_telefono, tipo) VALUES ( ?, ?, ?)";
				PreparedStatement psdTelefono = objetoSql.conexion.prepareStatement(cadena);
				psdTelefono.setInt(1, idInsertado);
				psdTelefono.setString(2, telefonoActual.obtenerNumeroTelefono() );
				psdTelefono.setString(3, telefonoActual.obtenerTipo());
				psdTelefono.executeUpdate();
			}		
		}
		
		objetoSql.desconectar();
		return idInsertado;
		
	}
	
	
}
